Engee 文档
Notebook

去除陀螺仪数据中的高频噪声

本示例展示了如何使用EngeeDSP库中的MedianFilter块去除流数据中的高频辐射。

中值滤波器是一种非线性数字滤波技术,通常用于去除图像或信号中的噪声。

该算法的实现首先要连接这些库:

In [ ]:
Pkg.add(["DelimitedFiles"])
Warning: could not download http://pkgserver.pkgserver.svc.cluster.local/registries
  exception = RequestError: HTTP/1.1 404 Not Found while requesting http://pkgserver.pkgserver.svc.cluster.local/registries
@ Pkg.Registry /usr/local/julia/share/julia/stdlib/v1.10/Pkg/src/Registry/Registry.jl:69
   Resolving package versions...
    Updating `~/.project/Project.toml`
  [8bb1440f] + DelimitedFiles v1.9.1
  No Changes to `~/.project/Manifest.toml`
In [ ]:
import .EngeeDSP
using DelimitedFiles
using Plots
plotlyjs()
Out[0]:
Plots.PlotlyJSBackend()

从 JL 文件加载带有高频噪声的信号,这就是Julia源代码文件。

In [ ]:
matrix = readdlm("$(@__DIR__)/data.jl", '\t', Float64, '\n');

将文件编码为 714 个样本,使每列数据包含 10 个帧。

In [ ]:
In1 = map(Iterators.partition(axes(matrix,1), 714)) do cols
    matrix[cols,:]
end 
Out[0]:
10-element Vector{Matrix{Float64}}:
 [-122.0 -13.0 3.0; -101.0 17.0 -4.0; … ; -109.0 12.0 1.0; -104.0 8.0 -4.0]
 [-99.0 18.0 -7.0; -92.0 19.0 15.0; … ; -110.0 22.0 -7.0; -113.0 21.0 -3.0]
 [-89.0 9.0 9.0; -112.0 27.0 -7.0; … ; -99.0 16.0 5.0; -94.0 23.0 9.0]
 [-94.0 23.0 9.0; -94.0 23.0 -7.0; … ; -113.0 10.0 -2.0; -106.0 4.0 6.0]
 [-91.0 -2.0 -6.0; -108.0 10.0 5.0; … ; -91.0 16.0 0.0; -91.0 16.0 0.0]
 [-111.0 8.0 3.0; -111.0 -2.0 4.0; … ; -105.0 13.0 9.0; -99.0 25.0 -2.0]
 [-99.0 25.0 -2.0; -102.0 7.0 7.0; … ; -101.0 14.0 6.0; -107.0 24.0 14.0]
 [-97.0 8.0 9.0; -95.0 1.0 14.0; … ; -112.0 10.0 19.0; -101.0 1.0 -2.0]
 [-91.0 1.0 28.0; -107.0 18.0 6.0; … ; -109.0 -3.0 3.0; -106.0 12.0 -5.0]
 [-106.0 12.0 -5.0; -112.0 5.0 9.0; … ; -98.0 6.0 28.0; -120.0 6.0 28.0]

在进行过滤时,系统使用的窗口长度为 10。

In [ ]:
var_median_fir = EngeeDSP.MedianFilter(WindowLength = 10)
EngeeDSP.setup!( var_median_fir, In1[1] )
Out1 = In1
for i = 1:10 # Обработка сигнала в цикле.
    global  gyroData = In1[i]
    global filteredData = EngeeDSP.step!(var_median_fir,gyroData)
    Out1[i] = filteredData
end
Out1 = vcat(Out1...)
Out[0]:
7140×3 Matrix{Float64}:
    0.0   0.0    0.0
    0.0   0.0    0.0
    0.0   0.0    0.0
    0.0   0.0    0.0
  -49.0   0.0    0.0
  -98.0   0.0   -0.5
  -99.5   0.0   -2.5
  -99.5   1.0   -2.5
 -101.0   3.0   -5.0
 -107.0   5.5   -5.5
 -103.5   6.5   -7.5
 -108.0   6.5  -10.5
 -110.0   7.0  -12.0
    ⋮          
 -110.5  12.0    9.0
 -110.0  13.0   12.0
 -110.0  14.0   12.5
 -110.0  14.0   12.5
 -112.0  14.0   12.5
 -112.0  16.0   12.5
 -110.0  16.0   12.5
 -110.0  14.0   10.0
 -110.0  14.0    8.0
 -110.0  14.0    7.0
 -105.0  10.5    7.0
 -107.0   7.0    7.0

创建对象图,查看滤波后的输出,并与带噪声的输入信号进行比较。

In [ ]:
plot( [matrix[:,3],Out1[:,3]], ylims = [-300, 300], label=["Входной сигнал" "Отфильтрованный выход"], legendfontsize=6)
Out[0]:

输出

在本例中,我们演示了在Engee开发环境中使用扩展环境功能的附加库的可能性,即EngeeDSP库和在其中实现的MedianFilter